﻿using System;
using System.Collections.Generic;
using System.Text;

namespace LeetcodeTest._100._30
{
    public class Leetcode24
    {
        public class ListNode
        {
            public int val;
            public ListNode next;
            public ListNode(int x) { val = x; }
        }

        /*
         24. Swap Nodes in Pairs

             Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed. 
             */
        public ListNode SwapPairs(ListNode head)
        {
            if (head == null || head.next == null)
                return head;

            ListNode tempNode = head.next;
            ListNode mainNode = head;
            int tempValue;
            while (tempNode != null)
            {
                tempValue = tempNode.val;
                tempNode.val = mainNode.val;
                mainNode.val = tempValue;

                mainNode = tempNode.next;
                if (mainNode == null)
                    return head;
                tempNode = tempNode.next.next;
            }
            return head;
        }
    }
}
